#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
抖音自动评论脚本 - 结合版本
使用 Playwright 本地浏览器 + Browser Use 的 AI Agent 自动评论
"""

import asyncio
import os
import json
from pathlib import Path
from pickle import TRUE
from browser_use import Agent, Browser
from browser_use.llm import ChatAzureOpenAI, ChatDeepSeek, ChatBrowserUse,ChatOpenAI


async def douyin_comment_automation(cookie_file='douyin_storage_state.json'):
    """
    结合 Playwright 配置和 Browser Use 的自动评论功能
    
    参数:
        cookie_file: Cookie 文件路径（如果文件存在则自动加载）
    
    流程:
    1. 使用 Browser Use 的 Browser，配置与 main_simple.py 相同的参数
    2. 如果 Cookie 文件存在，自动加载 Cookie
    3. 使用 AI Agent 自动执行评论任务
    
    注意:
    - 使用 cookie_manager.py 来获取和保存 Cookie
    - 本脚本只负责加载 Cookie 和执行任务
    """

    browser = None

    try:
        # 1. 初始化 Azure OpenAI LLM
        # 配置 Azure OpenAI 环境变量
        print("正在配置 Azure OpenAI...")

        llm = ChatAzureOpenAI(
            model="gpt-4o",
            api_key=os.getenv("PEACH_AZURE_OPENAI_API_KEY"),
            azure_endpoint=os.getenv("PEACH_AZURE_OPENAI_ENDPOINT"),
            azure_deployment="gpt-4o",  # 替换为你的部署名称，如 gpt-4o
            # api_version="2025-01-01-preview",  # API 版本
        )

        # api_key = os.getenv("ALIBABA_CLOUD")
        # base_url = 'https://dashscope.aliyuncs.com/compatible-mode/v1'
        # llm = ChatOpenAI(model='qwen-plus', api_key=api_key, base_url=base_url)

        # llm = ChatDeepSeek(
        #     model="deepseek-chat",
        #     api_key=os.getenv("DEEPSEEK_API_KEY_BROWSER_USE"),
        # )

        # llm = ChatBrowserUse()




        # 2. 创建 Browser Use 的 Browser 实例
        print("正在创建 Browser 实例...")

        # 检查 storage_state 文件是否存在
        storage_path = Path(cookie_file)
        storage_state_param = None

        if storage_path.exists():
            print(f"\n找到 Storage State 文件: {storage_path.absolute()}")
            storage_state_param = str(storage_path.absolute())

            # 读取并显示 cookie 信息
            try:
                with open(storage_path, 'r', encoding='utf-8') as f:
                    storage_data = json.load(f)
                    cookies = storage_data.get('cookies', [])
                    print(f"📦 Storage State 包含 {len(cookies)} 条 Cookie")

                    # 显示部分 cookie 信息用于调试
                    print(f"🔍 Cookie 预览:")
                    for i, cookie in enumerate(cookies[:3], 1):
                        print(f"  {i}. {cookie.get('name')}: domain={cookie.get('domain')}")
            except Exception as e:
                print(f"读取 Storage State 失败: {e}")
        else:
            print(f"\nStorage State 文件不存在: {storage_path.absolute()}")
            print("提示: 使用 'python cookie_manager.py' 获取 Cookie")

        # 创建 Browser（使用 storage_state）
        print("\n正在创建 Browser...")
        browser = Browser(
            headless=False,
            window_size={'width': 1000, 'height': 600},
            keep_alive=True,
            storage_state=storage_state_param,  # 使用文件路径
        )

        print(" Browser 已创建")
        if storage_state_param:
            print("Storage State 已加载，Cookie 将自动应用")

        # 3. 创建 Agent 并执行任务
        print("\n正在初始化 Agent...")
        # 2. 点击我知道了，跳过新手指引
        # 3. 如果视频下方的连播按钮是红色，就点击连播按钮，关闭自动连播

        task = """
            请执行以下任务:

            1. 打开网址: https://www.douyin.com/user/self?from_tab_name=main&modal_id=7493547352855285042

            2. 在网页中找到 评论 图标,dom 中提取 feed-comment-icon信息 。
            
            3. 点击评论图标进入评论区域。
            
            4. 输入评论内容  这个图真漂亮
            
            5. 发布评论。
            """
        
        agent = Agent(
            task=task,
            llm=llm,
            browser=browser,  # 使用配置好的 Browser
            use_vision=True,  # 启用视觉识别
            max_actions_per_step=5,  # 每步最多执行5个动作
            max_failures=3,  # 最多重试3次
        )

        print("✅ Agent 已初始化")
        print("\n开始执行抖音评论任务...")
        print("=" * 60)

        # 4. 执行任务
        history = await agent.run(max_steps=30)

        # 5. 输出执行结果
        print("\n" + "=" * 60)
        print("=== 任务执行完成 ===")
        print(f"总共执行了 {history.number_of_steps()} 步")
        print(f"访问的URL: {history.urls()}")

        if history.is_successful():
            print("✅ 评论发布成功!")
        else:
            print("❌ 任务执行失败")
            if history.errors():
                print("错误信息:", history.errors())

        # 6. 保持浏览器打开一段时间，让用户查看结果
        print("\n浏览器将保持打开 30 秒，让你查看结果...")
        print("按 Ctrl+C 可以立即关闭")
        try:
            await asyncio.sleep(30)
        except KeyboardInterrupt:
            print("\n收到中断信号...")

    except Exception as e:
        print(f"\n❌ 错误: {e}")
        import traceback
        traceback.print_exc()

        print("\n浏览器将保持打开 60 秒...")
        try:
            await asyncio.sleep(60)
        except KeyboardInterrupt:
            pass

    finally:
        if browser:
            try:
                await browser.stop()
                print("\n✅ 浏览器已关闭")
            except:
                pass


def main():
    try:
        asyncio.run(douyin_comment_automation())
    except KeyboardInterrupt:
        print("\n程序已退出")


if __name__ == "__main__":
    main()
